home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 038a / bas_int1.zip / PROGINFO.BAS < prev    next >
BASIC Source File  |  1991-06-04  |  3KB  |  96 lines

  1. '==================================================================
  2. 'Quick Basic Forum
  3. '   Date : 24-May-91
  4. '   From : Dick Dennison
  5. 'Subject : PROGRAMINFO.BAS, QuickBasic SUBroutine
  6. 'For the use of all QB users everywhere.  Keith Rolland
  7. '1:321/109.2@FidoNet
  8.  
  9. '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  10. ' declare sub ProgramInfo (ProgramName$, CommandTail$, DosVerHi%,_
  11. '                          DosVerLo%, CurrentDir$, Path$, Environment$)
  12. '
  13. ' This sub _returns_ the following info:
  14. '  ProgramName$ = the full name of the currently running program
  15. '  CommandTail$ = anything else that was on the command line, case
  16. '                 preserved
  17. '  Environment$ = the full text of the environment, each separated by
  18. '                 chr$(255)
  19. '  CurrentDir$ = the current directory, which may be different than Path$
  20. '  Path$ = the full path where the program is, as in "C:\BASIC\PROGS"
  21. '  DosVerHi% = the major number of DOS, as in "3"
  22. '  DosVerLo% = the minor number of DOS, as in "21"  (for DOS 3.21)
  23.  
  24. ' This routine should be used before any disk activity is performed,
  25. '  because the default 128-byte DTA (disk transfer area) is the
  26. '  CommandTail$ area.
  27. '========================================================================
  28.  
  29. '$include: '\qb\lib\qb.bi'          'Note that you must use /L command line
  30.                                     'option to get QB.QLB QuickLibrary w/
  31.                                     'Call Interruptx
  32.  
  33. sub ProgramInfo (ProgramName$, CommandTail$, DosVerHi%,_
  34.                  DosVerLo%, CurrentDir$, Path$, Environment$)
  35.  
  36. Environment$ = "" : ProgramName$ = "" : Path$ = "" : CommandTail$ = ""
  37. dim reg as RegTypeX
  38.  
  39. reg.ax = &H3000
  40. interruptx &H21, reg, reg
  41. DosVerLo% = (reg.ax \ 256)
  42. DosVerHi% = (reg.ax mod 256)
  43.  
  44. reg.ax = &H1900
  45. interruptx &H21, reg, reg
  46. Drive$ = chr$((reg.ax and &Hff) + 65) + ":\"
  47. reg.dx = 0
  48. reg.ax = &H4700
  49. tmp$ = space$(64)
  50. reg.ds = varseg(tmp$)
  51. reg.si = sadd(tmp$)
  52. interruptx &H21, reg, reg
  53. CurrentDir$ = Drive$ + left$(tmp$, instr(tmp$, chr$(0)) - 1)
  54.  
  55.  
  56. reg.ax = 25088
  57. interruptx &H21, reg, reg
  58. def seg = reg.bx
  59. EnvLo% = peek(&H2c)
  60. EnvHi% = peek(&H2d)
  61. CmdTailLen% = peek(&H80)
  62.  
  63. for tmp% = &H81 to ((&H81 + CmdTailLen%) - 1)
  64. CommandTail$ = CommandTail$ + chr$(peek(tmp%))
  65. next tmp%
  66.  
  67. def seg = EnvLo% + (EnvHi% * 256)
  68. Pointer% = 0
  69. do until peek(Pointer%) = 0
  70.         do until peek(Pointer%) = 0
  71.                 Environment$ = Environment$ + chr$(peek(Pointer%))
  72.                 Pointer% = Pointer% + 1
  73.         loop
  74.         Environment$ = Environment$ + chr$(255)
  75.         Pointer% = Pointer% + 1
  76. loop
  77.  
  78. Pointer% = Pointer% + 3
  79. do until peek(Pointer%) = 0
  80.         ProgramName$ = ProgramName$ + chr$(peek(Pointer%))
  81.         Pointer% = Pointer% + 1
  82. loop
  83.  
  84. PathLen% = len(ProgramName$)
  85. for Pointer% = PathLen% to 1 step -1
  86.         tmp$ = mid$(ProgramName$, Pointer%, 1)
  87.         if tmp$ = "\" then
  88.                 Path$ = left$(ProgramName$, (PathLen% - Pointer% - 2))
  89.                 ProgramName$ = mid$(ProgramName$, Pointer% + 1)
  90.                 exit for
  91.         end if
  92. next Pointer%
  93. def seg
  94. end sub
  95.  
  96.